let命令
##基本用法 ##
ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
1 2 3 4 5 6 7
| { var a =1; let b =2; console.log(b); } console.log(a); console.log(b);
|
用let做循环处理就会比较方便,不会使i作用于外面。
1 2 3
| for (let i = 0; i < 10; i++) { } console.log(i);
|
1 2 3 4
| for (var i = 0; i < 10; i++) { } console.log(i)
|
用let时,因为变量是作用于遍历块内的,所以取过来的值是即时的,而var声明的是全局变量,调用时全局变量已经走完循环变成了10
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| let a =[]; for (let i = 0; i < 10; i++) { a[i]=function(){ console.log(i) } } a[6]() let b =[]; for (var i = 0; i < 10; i++) { b[i]=function(){ console.log(i) } } b[6]()
|
let 不能创建名字一样的变量,如果变量名一样会报错
1 2 3
| let i = 1; let i = 2; console.log(i)
|
let和var的报错提示也是不一样的
1 2 3 4
| console.log(bar) let bar; console.log(tar) var tar
|
只要有let的存在,那么这个变量只存在于该作用域内
1 2 3 4 5 6 7 8
| var tmp = 123; if (true) { tmp = 'abc'; let tmp ="123"; } if (true) { tmp = 'abc'; }
|
##暂时性死区: ##
只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
let不允许重复声明变量
1 2 3 4 5 6 7 8
| function () { let a = 10; var a = 1; } function () { let a = 10; let a = 1; }
|
块级作用域理解:
下面代码中外层代码块不受内层代码块影响
1 2 3 4 5 6 7
| function f1() { let n = 5; if (true) { let n = 10; } console.log(n); }
|
const命令
基本用法:
const声明一个只读的常量。一旦声明,常量的值就不能改变。
一旦常量被更改,将会报错
1 2 3
| const a = 1 console.log(a) a = 2
|
声明const时必须有初始值,因为const不能被修改,所以当声明没有初始值的const会报错
同let一样,const也存在暂时性死区
1 2 3 4
| if (true) { console.log(index); const index = 5; }
|
如果一个变量被声明过,const再来声明也会报错
1 2 3 4 5
| var name = "temzl"; let age = 22; const name = "张三"; const age = 18;
|
const的实际目的并不只是使该变量不可改动,实际意义在于const指向的该变量内存地址不可改动
1 2 3 4 5 6
| const foo = {}; foo.prop = 123; foo.prop foo = {};
|
申明变量的六种方式:
1、var
2、function
3、let
4、const
5、import
6、class
不要再说只有一个var了 ✧(≖ ◡ ≖✿)嘿嘿
如果有时间后面会讲讲import和class
本文部分文章引用阮一峰大神的文章,地址:http://es6.ruanyifeng.com/#docs/let